﻿#define  _CRT_SECURE_NO_WARNINGS 1
//练习1：编写代码实现：求⼀个整数存储在内存中的⼆进制中1的个数
int count_bit_one(unsigned int n)
{
	int count = 0;
	while (n) // n不为0说明2进制位里面一定有1
	{
		if ((n % 2) == 1)
		{
			count++;
		}
		n /= 2;
	}
	return count;
}
//11111111111111111111111111111111  -1存在内存里面全是1 补码  我们这个程序算不出-1中1的个数
// 我们可以弄成unsigned int 无符号整数  这样就可以了
int main()
{
	int num = 0;
	scanf("%d", &num);
	int ret = count_bit_one(num);
	printf("%d\n", ret);
	return 0;
}
//练习2：⼆进制位置0或者置1
//编写代码将13⼆进制序列的第5位修改为1，然后再改回0
//13的2进制序列： 00000000000000000000000000001101    值13
//将第5位置为1后：00000000000000000000000000011101   值 29
//将第5位再置为0：00000000000000000000000000001101
#include <stdio.h>
//int main()
//{
//	int a = 13;
//	// 00000000000000000000000000001101 -- 13
//	// 00000000000000000000000000010000 -- 只要|下面这个数 有1则为1  相同才为0  或
//
//	// 00000000000000000000000000011101 -- 29
//	// 11111111111111111111111111101111 -- 只要&上这个数即可 就能变为13 这个数是我们刚才得到的那个数取反
//	// 2进制位按位于  同时为1才为1  有一个为0 则为0
//	int n = 5;
//	   // 1<<(n-1)这样就能得到上面的第二个数   左移动4位
//	a = a | (1 << (n - 1));  
//	printf("%d\n", a);  // 29
//	a &= ~(1 << (n - 1));
//	printf("%d\n", a);  // 13
//
//	return 0;
//}